主題為 Predicting Inter Bus Arrival Times ,Output 為 scalar (數值) 。
東西已經做出來,也做了實際的驗證,之後會從收集Data 開始,依序介紹整個後端處理AI的部分,處理Data,預測站到站的所花時間。
過程中,會有碰到一些問題和嘗試過的應變措施和最後的解法分享。
但做這些其實是再做完AI研究的一段時間過後的事,今天回顧當時學ML的影片,發現其實自己省略了一些其他評估或是select function 的部分。
如何找到 一個function 是用來得到最佳解的?
[重點回顧]
Step 1 : 選一個 function set
Step 2 : 衡量每個 function 的好壞
Step 3 : 使用 algorithm 挑出 最優的 function
[目標] 寶可夢進化後的cp值 (戰鬥力)
Step 1 :: 挑 linear model 來當作我們function set
假設是 y = w*x + b
y : 預測值 :: 進化後的cp值
x : 特徵值 :: 進化前的cp值
w : 權重 :: 未知 # 由 Gradient Desent 方法求出
b : bias :: 未知 # 由 Gradient Desent 方法求出
Step 2 :: 衡量每個function的好壞
Loss Function 看哪個function 的參數好
也就是說 我們要衡量 weight & bias 的好壞
而Loss function 怎麼定義 ?
可以由自己定 (依喜好)
但 在影片中 以常見 Loss Function 來說明
summation { ( y hat (真正數值) - 預測數值 ) ^2 }
那哪一組(參數:w,b)可以使 loss function 值為最小
Gradient Desent
: 動態調整參數那有沒有可能有local minimal 的問題 ?
[local minimal 的問題]
走到 local minimal 則停住,但其實還存在global minimal 只是沒走到。
在 linear regression 是不會發生的 (Oh yeah)
convex => no local optimal
In linear regression, the loss function L is convex
Learning rate : 一步走的大小
當接近 最低點 ,走小步
當離最低點 還很遠,走大步
Step 3 : 找到一個 演算法挑出 最好的function
以在 Step 2 提到的 y = wx + b 先來做個評估
training data 評估的結果 error 值 比 testing data 還來得小 ,也就是說 效果比較好,其實這很直觀,當學生考試時,老師出的題目是從平常的練習題(training data)出的,當然會考得比較好。而沒看過的考題或是題型 歸類到 testing data。
實際上,看testing data 評估出來的值,較客觀。
那如何讓model更準呢 ? select another model
把model 變複雜試試看,原本是特徵值的1次方,變成 2 3 4 5 次方 。
截圖自 Regression - Case Study
由上方的兩張圖可以看出
Traing Data 隨著複雜度上升,error 越小。因為 涵蓋範圍越大。
但是 Testing Data 並非如此,在次方數為5時,error 暴增。
==> 更複雜 在testing data error 的上升/下降 不一定
相似的example : 駕訓班學車
教練會給你說 到哪 看到哪個樹 開始轉,路邊停車。再得到駕照後,一樣路邊停車,沒有任何標誌可以看,就停不太進去啦,總是歪一邊QQ
再來是否除了現在的CP值會影響進化後的CP值呢?
其實在不同物種是有差的,所以套入不同的linear model,再用一種方式 讀法(delta) 合併 一個linear model,當是A物種 採用哪個,當是B物種採用哪個 ...
最後 再減少error上,還有一個方法 : redesign loss function 。
當 weight 越smooth 越好,所以多了一個 參數(入:lamda) 去 調整平滑度
當越平滑時 輸入對輸出的影響小 => 雜訊下降
但太over smooth 也不行 。在調整的每次紀錄中挑一個 error 最小的 。